/**
 * MatriculaEstudiante.java
 */

 /**
 *  AdSec: Administrador de Secundarias
 *  Copyright (C) 2009 Daniela Ramírez Chaves (dannyrch@gmail.com)
 *  Copyright (C) 2009 Leonel Salazar Valverde (leo87sv@gmail.com)
 *
 *  This file is part of AdSec.
 *  AdSec is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  AdSec is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with AdSec.  If not, see <http://www.gnu.org/licenses/>.
 */

package adsec.entidades;

import java.util.Calendar;
import adsec.negocios.UtilidadesCapaNegocios;


public class MatriculaEstudiante implements Comparable<MatriculaEstudiante>{

    // <editor-fold defaultstate="collapsed" desc="Constantes de Nombres de Columnas">
    public final static String nombreTabla = "estudiante_lleva_materia";
    public final static String cedulaNC = "cedula";
    public static final String idMateriaNC = "id_materia";
    public static final String idMateriaCursadaNC = "id_materia_cursada";
    public static final String nombreNC = "nombre";
    public static final String anioNC = "anio";
    public static final String nivelNC = "nivel";
    public static final String seccionNC = "seccion";
    public static final String periodosNC = "cantidad_periodos";
    public static final String tipoMatriculaNC = "tipo_matricula";
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Atributos privados de la clase">
    private String cedula;
    private int idMateria;
    private int idMateriaCursada;
    private String nombreMateria;
    private int anio;
    private int nivel;
    private int seccion;
    private int cantidad_periodos;
    private int tipoMatricula;
    private boolean estadoMateria;
    // </editor-fold>

    private static int MATERIA_NULA = Materia.MATERIA_NULA;
    private static String CEDULA_NULA = UtilidadesCapaNegocios.CEDULA_INVALIDA;
    public static final int REGULAR = 0;
    public static final int REPITIENDO = 1;
    public static final int AVANZANDO = 2;
    public static final String[] tiposMatricula = {"Regular", "Repitiendo", "Adelantando"};

    public MatriculaEstudiante(){
        this.cedula = CEDULA_NULA;
        this.idMateria = MATERIA_NULA;
        this.idMateriaCursada = MATERIA_NULA;
        this.nombreMateria = "";
        this.anio = Calendar.getInstance().get(Calendar.YEAR);
        this.nivel = 0;
        this.seccion = 0;
        this.estadoMateria = false;
        this.cantidad_periodos = 0;
        this.tipoMatricula = REGULAR; // Regular
    }//fin de constructor

    /**
     * @return the cedula
     */
    public String getCedula() {
        return cedula;
    }

    /**
     * @param cedula the cedula to set
     */
    public void setCedula(String cedula) {
        this.cedula = cedula;
    }

    /**
     * @return the idMateria
     */
    public int getIdMateria() {
        return idMateria;
    }

    /**
     * @param idMateria the idMateria to set
     */
    public void setIdMateria(int idMateria) {
        this.idMateria = idMateria;
    }

    /**
     * @return the idMateriaCursada
     */
    public int getIdMateriaCursada() {
        return idMateriaCursada;
    }

    /**
     * @param idMateriaCursada the idMateriaCursada to set
     */
    public void setIdMateriaCursada(int idMateriaCursada) {
        this.idMateriaCursada = idMateriaCursada;
    }

    /**
     * @return the nombreMateria
     */
    public String getNombreMateria() {
        return nombreMateria;
    }

    /**
     * @param nombreMateria the nombreMateria to set
     */
    public void setNombreMateria(String nombreMateria) {
        this.nombreMateria = nombreMateria;
    }

    /**
     * @return the anio
     */
    public int getAnio() {
        return anio;
    }

    /**
     * @param anio the anio to set
     */
    public void setAnio(int anio) {
        this.anio = anio;
    }

    /**
     * @return the nivel
     */
    public int getNivel() {
        return nivel;
    }

    /**
     * @param nivel the nivel to set
     */
    public void setNivel(int nivel) {
        this.nivel = nivel;
    }

    /**
     * @return the seccion
     */
    public int getSeccion() {
        return seccion;
    }

    /**
     * @param seccion the seccion to set
     */
    public void setSeccion(int seccion) {
        this.seccion = seccion;
    }

    /**
     * @return the cantidad_periodos
     */
    public int getCantidad_periodos() {
        return cantidad_periodos;
    }

    /**
     * @param cantidad_periodos the cantidad_periodos to set
     */
    public void setCantidad_periodos(int cantidad_periodos) {
        this.cantidad_periodos = cantidad_periodos;
    }

    /**
     * @return the estadoMateria
     */
    public boolean isEstadoMateria() {
        return estadoMateria;
    }

    /**
     * @param estadoMateria the estadoMateria to set
     */
    public void setEstadoMateria(boolean estadoMateria) {
        this.estadoMateria = estadoMateria;
    }

   public boolean equals(MatriculaEstudiante matricula){
        boolean esIgual = false;
        esIgual = this.nivel == matricula.getNivel();
        if(esIgual){
            esIgual &= this.idMateria == matricula.getIdMateria();
        }
        return esIgual;
    }

    public int compareTo(MatriculaEstudiante matricula){
        int resultado = 0;
        if(this.nivel == matricula.getNivel()){
            if(this.nombreMateria.equals(matricula.getNombreMateria())){
                if(this.seccion == matricula.getSeccion()){
                    resultado = 0;
                }else{
                    resultado = this.seccion > matricula.getSeccion() ? -1 : 1;
                }
            }else{
                resultado = this.nombreMateria.compareTo(matricula.getNombreMateria()) > 0 ? -1 : 1;
            }
        }else{
            resultado = this.nivel > matricula.getNivel() ? -1 : 1;
        }
        return resultado;
    }

    /**
     * @return the tipoMatricula
     */
    public int getTipoMatricula() {
        return tipoMatricula;
    }

    /**
     * @param tipo the tipoMatricula to set
     */
    public void setTipoMatricula(int tipo) {
        this.tipoMatricula = tipo;
    }

}//fin de MateriaCursada

